通过Selenium浏览Chrome://设置

时间:2015-10-19 17:26:15

标签: java selenium selenium-webdriver selenium-chromedriver

我正在使用Java和Selenium编写测试,我使用下面的代码进入Chrome:设置

driverChrome.manage().window().maximize();
driverChrome.get("chrome://settings");

但是当页面打开时我找不到任何网页元素,例如当我尝试通过此代码找到“显示高级设置....”时

driverChrome.findElement(By.xpath("//a[@id='advanced-settings-expander']")).click();

它抛出一个错误,说“没有这样的元素:无法找到元素” 我试图找到其他元素,但它们都失败了。我在这里看到了this,但没有帮助。

找到以下代码:

    driverChrome.manage().window().maximize();
    driverChrome.get("chrome://settings");
    Thread.sleep(5000);
    WebElement w = driverChrome.findElement(By
            .xpath("//iframe[@name='settings']"));      
    driverChrome = driverChrome.switchTo().frame(w);
    Thread.sleep(1000);
    while (true) {
        try {
            WebElement we = w.findElement(By
                    .xpath("//a[text()='Show advanced settings...']"));             
            if (we.isDisplayed()) {
                we.click();
                Thread.sleep(1000);
                break;
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
            System.out.println("=========================");
        }
    }

1 个答案:

答案 0 :(得分:1)

我还没有对此进行过测试,但是我把你的代码片段清理干净了一下。试试这个,看它是否有效。这应该非常接近。

切换到IFRAME上下文后,您不需要像IFRAME那样引用w.findElement()

一般来说,Thread.sleep()不是一个好习惯。您最好将WebDriverWaitExpectedConditions一起使用。检查文档,了解您可以等待使用ExpectedConditions的所有不同内容。我在下面的代码中使用了.elementToBeClickable()。这是完美的,因为您想要单击一个元素。 .until()返回等待的元素,因此您只需在语句的末尾附加.click() ...或者您可以将该元素存储在WebElement变量中并在其他地方使用它。 / p>

driverChrome.manage().window().maximize();
driverChrome.get("chrome://settings");
WebElement w = driverChrome.findElement(By.xpath("//iframe[@name='settings']"));
driverChrome = driverChrome.switchTo().frame(w);

WebDriverWait wait = new WebDriverWait(driverChrome, 10);
wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//a[text()='Show advanced settings...']"))).click();

// alternative example... store returned element and then click on a separate line... or use the variable elsewhere, etc.
// WebElement link = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//a[text()='Show advanced settings...']")));
// link.click();