有人可以提供更好的这个div元素的xpath,或者帮助解释为什么我似乎无法选择所需的div?
此XPath不起作用:
//div[starts-with(normalize-space(.),'Welcome to the Shipt Shopper') and @class='text']
即使它在chrome开发人员工具中突出显示,也会抛出NoSuchElementException。
页面上的所有元素都是这种情况
来自页面的HTML片段,其中包含我尝试定位的内容:
<div class="content-wrapper">
<div class="content" style="padding-top: 116px;">
<div class="media">
<div class="attachment" data-attachment="{"image":"https:\/\/images.typeform.com\/images\/29rsVwT3VF\/image\/default#.png","width":360,"height":137,"video_source":"","video_id":""}" style="width: 360px; height: 137px;">
<img src="https://images.typeform.com/images/29rsVwT3VF/image/default#.png" data-original="https://images.typeform.com/images/29rsVwT3VF/image/default#.png" style="width: 360px; height: 137px; display: inline;">
</div>
</div>
<div class="text" style="padding-top: 30px; margin-left: 0px;">
Welcome to the Shipt Shopper application! <br><br>Ready to get started?
</div>
<div class="button-wrapper" style="margin-top: 30px;">
<div class="button general full enabled hover-effect" style="">Begin</div>
<div class="button-text">press <strong>ENTER</strong></div>
</div>
</div>
</div>
答案 0 :(得分:1)
您定位的内容位于<iframe>
内。
我不熟悉如何配置Selenium,但看起来您可能需要切换到该帧。由于它没有@id
,您可能需要按位置选择:
driver.switchTo().frame(0)
然后执行XPath。
完成后,跳回包含HTML页面:
driver.switchTo().defaultContent();
答案 1 :(得分:0)
根据 HTML ,您共享了xpath
,您使用的是有效的,并且是正确的。但是当您尝试通过 Selenium 与它进行交互时,将抛出 NoSuchElementException 。
要通过 Selenium 与元素互动,您可以使用以下xpath
:
//div[@class='content-wrapper']/div[@class='content']//div[@class='text' and contains(normalize-space(), 'Welcome to the Shipt Shopper application')]
但是看看 HTML ,似乎你必须诱导WebDriverWait
元素可见,如下所示:
WebElement welcomeShiptShopper = new WebDriverWait(driver, 10).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='content-wrapper']/div[@class='content']//div[@class='text' and contains(normalize-space(), 'Welcome to the Shipt Shopper application')]")));
网页不会在我的结尾打开。正如其他人所指出的那样, WebElement 可能在<iframe>
标记内,在这种情况下,您必须首先使用以下任一方法切换到适当的 iframe :
切换 Frame Name
driver.switchTo().frame("frame_name");
切换 Frame ID
driver.switchTo().frame("frame_id");
切换 Frame Index
driver.switchTo().frame(1);
切换到适当的框架后,现在您可以使用上面提到的xpaths
来查找 WebElement 。