【问题标题】:How do you grab the text for a label using Selenium如何使用 Selenium 获取标签的文本
【发布时间】:2019-10-28 11:35:50
【问题描述】:

所以我相信我能够通过 CSS Selector 或 Xpath 甚至通过 TagName 来获取元素,但我无法获取与其关联的文本。

这是 HTML 的样子:

<label for="AnswerText">This is the question text? </label>

在我的代码中我有这个:

static IWebDriver driver = new ChromeDriver(".");
static IWebElement securityQuestion = driver.FindElement(By.TagName("label"));

Console.WriteLine("question is ", securityQuestion.Text)

我想要做的是从标签“这是问题文本?”中获取此文本。我这样做是因为文本会发生变化,并且根据答案,输入会有所不同,因此我必须合并逻辑才能获取该文本并将其设置为等于要匹配的变量。

我尝试过 .Text GetAttribute("value") 但这不起作用,因为标签没有任何值以及不同的选择器。

static IWebDriver driver = new ChromeDriver(".");
static IWebElement securityQuestion = driver.FindElement(By.TagName("label"));

Console.WriteLine("question is ", securityQuestion.Text)

【问题讨论】:

  • 你试过.getAttribute('textContent')吗?
  • 你也可以试试.getAttribute("innerHTML")
  • 我尝试了这两种方法,但它们似乎不起作用。我唯一的选择可能只是一种使用某种屏幕阅读的方法,比如我真的不想做的 OCR。

标签: c# selenium xpath css-selectors webdriverwait


【解决方案1】:

要提取文本This is the question text?您必须为ElementIsVisible()GetAttribute("innerHTML") 诱导WebDriverWait,您可以使用以下任一@ 987654321@:

  • CssSelector:

    new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementIsVisible(By.CssSelector("label[for='AnswerText']"))).GetAttribute("innerHTML");;
    
  • XPath:

    new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementIsVisible(By.XPath("//label[for='AnswerText']"))).GetAttribute("innerHTML");
    

【讨论】:

  • 这不起作用。我仍然遇到同样的问题,无法无错误地抓取文本。
【解决方案2】:

我还没有足够的代表发表评论,但你所拥有的应该可以。让我想知道你是否得到了正确的元素。尝试打印文本时的异常/输出是什么?我假设页面上有多个带有 TagName“标签”的元素。我会尝试找到一个更独特的父元素,然后获取包含您要查找的文本的子元素。

 IWebElment elem = driver.FindElement(By.Id("ParentID")).FindElement(By.TagName("label"));

或者尝试使用 XPath...也许您之前尝试的路径不正确。如果您提供更多的 Html,我可以尝试提供帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-15
    • 2021-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    相关资源
    最近更新 更多