我正在这样做:
WebElement userName = driver.findElement(By.id("username"));
但是我得到了
Unable to locate element: #username
我的DOM看起来像这样:
<input type="text" name="username" id="username" class="u-leader-m10"
required="required" tabindex="1">
从外观上看,一切都很好。那么,有哪些领域可以调查此失败? 乐意提供更多信息。我只是不知道有什么意义。
编辑:我尝试使用“名称”而不是“ id”,但它仍在工作-仍然感到困惑!
答案 0 :(得分:0)
尝试以下一项
WebElement userName = (new WebDriverWait(driver, 10)).until(ExpectedConditions.presenceOfElementLocated(By.id("username")));
答案 1 :(得分:0)
显然,使用id
属性的代码块没有任何问题,但是在HTML DOM中定位元素的最佳策略将在很大程度上取决于{{ 3}}以及您希望在元素上执行的操作。
话虽如此,看来该元素是<input>
元素,并且向前移动您将调用click()
或sendKeys()
并实现必须诱使 WebDriverWait < / em>用作elementToBeClickable()
,则可以使用以下任一DOM Tree:
cssSelector
:
WebElement userName = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("input#username[name='username']")));
xpath
:
WebElement userName = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@id='username' and @name='username']")));