java - 为什么元素不能定位在selenium的方法函数中?

标签 java selenium selenium-webdriver

我已经创建了一个获取交易 ID 的方法,但无法找到该元素。我无法检索 Web 表中的 ID,因为它显示无法找到该元素的错误。此外,它还会打开另一个空白窗口。

这是获取ID的方法

public String getTransactionID(String ID) throws IOException {

    File src = new File("C:\\selenium\\ExcelData\\TestData.xlsx");
    FileInputStream fis = new FileInputStream(src);
    wb = new XSSFWorkbook(fis);
    XSSFSheet sh1 = wb.getSheetAt(0);

    String getValue = null;
    String TransactionID = null;
    for (int i = 0; i<=1000; i++) {
        if(sh1.getRow(i).getCell(0) != null)
        {
             getValue = sh1.getRow(i).getCell(0).getStringCellValue();
        }

        if(getValue != null) {
            if(getValue.contains(ID)) {
                System.setProperty("webdriver.gecko.driver","C:\\selenium\\geckodriver-v0.23.0-win64\\geckodriver.exe");

                WebDriver driver = new FirefoxDriver();
                TransactionID = driver.findElement(By.xpath("//table/tbody/tr[2]/td/table/tbody/tr/td/table/tbody/tr[1]/td/table/tbody/tr[1]/td")).getText();
                FileOutputStream fout = new FileOutputStream(src);
                sh1.getRow(i).createCell(1).setCellValue(TransactionID);
                wb.write(fout);
                fout.close();

                break;
            }   
        }   

    }
    return TransactionID;

这是调用该方法的行

GetExcel transID = new GetExcel();
transID.getTransactionID("Transaction ID");

最佳答案

问题

问题出在下面的代码片段中:

WebDriver driver = new FirefoxDriver();

这将打开一个新的 Firefox 浏览器。这就是为什么您会看到打开的“空白窗口”。

TransactionID = driver.findElement(By.xpath("//table/tbody/tr[2]/td/table/tbody/tr/td/table/tbody/tr[1]/td/table/tbody/tr[1]/td")).getText();

紧接着,您将尝试在网站上搜索该元素。正如您可以想象的那样,尝试在空白页面上查找元素显然会引发错误。

您需要先导航到该网站:

driver.get(your_url_here);

旁注

您的 xpath 并不理想,因为它太硬编码了——如果在网站中创建了新元素,您的 xpath 可能会崩溃。您应该使用更动态的方法,利用元素的 DOM 属性,例如 id:

//table[@id='xxx']//td

文档:https://www.w3schools.com/xml/xml_xpath.asp

此外,您的变量名称 TransactionID 应采用小写字母,即 transactionID

关于java - 为什么元素不能定位在selenium的方法函数中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54701662/

相关文章:

java - 生成名称排列并生成数据库

angularjs - Chrome 无法启动( Protractor 、Ubuntu、 headless )

java - 如何从 Selenium/Ghostdriver 将参数传递给 PhantomJS 脚本

python - 无法使用selenium触发对某个链接的点击

java - MapStruct 无法识别 @Mapping 中的字段 - 简单配置

java求二维方形网格的总和

java - 方法 getHomeworkSum() 返回最新的作业值,而不是总和

node.js - 使用 Nightwatch 在 headless Safari 中运行 e2e 测试

java - 如何使用优先级和组注释对测试用例进行排序?

java - 哪种类型的定位器(如 ID、xpath、类名等)适合在 selenium 自动化中使用