Selenium:如何从通过CssSelector或XPath提供的HTML中查找元素

时间:2018-06-01 09:07:06

标签: c# selenium selenium-webdriver xpath css-selectors

这是页面上的一个按钮:

<button data-purpose="add-section-btn" type="button" 
        class="ellipsis btn btn-default btn-block">
   <span class="a3 udi udi-plus-square"></span>
   <!-- react-text: 255 --> <!-- /react-text -->
   <!-- react-text: 256 -->Add Section<!-- /react-text -->
</button>

当我尝试使用以下代码找到它时:

var btns = _driver.FindElements(By.TagName("button"));
var sectionTitle = btns.Where(x => x.GetAttribute("data-purpose") == "add-section-btn");

返回null。

如果我尝试以下XPath:

var btn = _driver.FindElement(By.XPath("//button[data-purpose=\"add-section-btn\"]"));

然后我得到一个例外。

如何找到这样的按钮?

2 个答案:

答案 0 :(得分:0)

试试,

npm install @types/node@10.1.4

答案 1 :(得分:0)

根据 HTML ,您已共享以查找带有文字的元素添加部分,因为元素是React Element,您必须诱导 WebDriverwait 使元素可见,您可以使用以下任一Locator Strategies

  • CssSelector

    var btn = new WebDriverWait(_driver, TimeSpan.FromSeconds(10)).Until(ExpectedConditions.ElementIsVisible(By.CssSelector("button.ellipsis.btn.btn-default.btn-block[data-purpose='add-section-btn']")));
    
  • 的XPath

    var btn = new WebDriverWait(_driver, TimeSpan.FromSeconds(10)).Until(ExpectedConditions.ElementIsVisible(By.XPath("//button[@class='ellipsis btn btn-default btn-block' and @data-purpose='add-section-btn'][normalize-space()='Add Section']")));