XPath无法选择元素

时间:2018-02-26 01:16:41

标签: selenium xpath selenium-webdriver

有人可以提供更好的这个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="{&quot;image&quot;:&quot;https:\/\/images.typeform.com\/images\/29rsVwT3VF\/image\/default#.png&quot;,&quot;width&quot;:360,&quot;height&quot;:137,&quot;video_source&quot;:&quot;&quot;,&quot;video_id&quot;:&quot;&quot;}" 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>

enter image description here

2 个答案:

答案 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