当我在兼容性视图中添加 URL/Domain 时,找不到 IEDriver 的 Selenium XPath

Selenium XPath not found for IEDriver when I add URL/Domain in compatibility view

当我在没有兼容性视图的情况下使用 IEDriver 执行我的脚本时,我的测试脚本是 运行 没有任何问题。

但是,如果我在兼容性视图中添加域后执行相同的脚本,则找不到某些元素,我会遇到异常。

例如 我想从此 DOM:

中获取所选项目的文本
<select id="selectNumber" name="selectNumber" style="width:180px;">
    <option selected="selected" value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
</select>

我正在使用 XPath .//*[@id='selectNumber']/option[@selected='selected'] 获取文本,但它不起作用。

我刚刚检查过在 IE DOM 中 selected="selected" 不会显示所选选项,直到我手动更改文档版本。

您可以使用适用于所有浏览器的 Select class。这是一些代码

Select sel = new Select(driver.findElement(By.id("selectNumber")));
WebElement selectOption = sel.getFirstSelectedOption();
String text = selectOption.getText();

我认为你应该考虑从使用 XPath 改为使用 cssSelector。找元素就安全多了,不依赖于整个"path"。使用 cssSelector 运行 IEDriver 时它很有可能不会中断(如您在问题中所述)。

您可以使用两者实现相同的目标,但是当您使用 XPath 时,您的 DOM 对更改更加敏感,并且您更有可能在页面更改后看到测试失败。

对于您的情况,您可以通过两种方式使用它:

XPath(你必须拥有它)

  1. driver.findElement(By.xpath(".//*[@id='selectNumber']/option[@selected='selected']"))

选择器

  1. driver.findElement(By.cssSelector("#selectNumber[selected]"))

当你有更复杂的 "paths" 时,你可以在 cssSelectors 中组合更多的东西,比如 CSS 类。例如(当您没有身份证件时):

<select class"nice-dropdown" name="selectNumber" style="width:180px;">
    <option selected="selected" value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
</select>

driver.findElement(By.cssSelector("select.nice-dropdown"))(return select 元素) driver.findElement(By.cssSelector("select.nice-dropdown option[value='3']"))(return 值为 3 的选项)

selectors 你的 "paths" 更短了。它们的工作方式与 select 或在 CSS.

中的使用方式相同

作为参考:

希望此信息对您有所帮助。