简单Selenium正则表达式Java

简单Selenium正则表达式Java,java,regex,selenium,selenium-webdriver,Java,Regex,Selenium,Selenium Webdriver,我不熟悉如何在Selenium中使用Reg-Ex,因此希望我能在这方面得到一些帮助。目前,当它运行时,它没有找到任何元素,这并不奇怪 List<WebElement> elements = SeleniumCommands.myDriver.findElements(By.id("assessment-answer-{[0-9]+}-1")); List elements=SeleniumCommands.myDriver.findElements(By.id(“评估答案-{[0-

我不熟悉如何在Selenium中使用Reg-Ex,因此希望我能在这方面得到一些帮助。目前,当它运行时,它没有找到任何元素,这并不奇怪

List<WebElement> elements = SeleniumCommands.myDriver.findElements(By.id("assessment-answer-{[0-9]+}-1"));
List elements=SeleniumCommands.myDriver.findElements(By.id(“评估答案-{[0-9]+}-1”);
我要抓取的东西的ID看起来像

<input id="assessment-answer-5713185-1" ...>

这里是一个更大的HTML解析的网站选择写作的目的

<div id="assessment-page-1">
  <ul id="question-row-5713185" class="plus-card card-white question-row">
    <li id="question-collapsible-5713185" class="question-collapsible">
    <li id="answers-container-5713185" class="answers-container">
      <div class=" assessment-two-answers">
      <input id="assessment-answer-5713185-1" type="radio" value="1" name="assessment-answer-5713185"/>
      <label class="assessment-answer-right answer-1" for="assessment-answer-5713185-1">Agree</label>
      <input id="assessment-answer-5713185-2" type="radio" value="2" name="assessment-answer-5713185"/>
      <label class="assessment-answer-left answer-2" for="assessment-answer-5713185-2">Disagree</label>
      </div>
    </li>
  </ul>
  <ul id="question-row-16432246" class="plus-card card-white question-row">
    <li id="question-collapsible-16432246" class="question-collapsible">
    <li id="answers-container-16432246" class="answers-container">
  </ul>
  <ul id="question-row-62590768" class="plus-card card-white question-row">
  <ul id="question-row-16162378" class="plus-card card-white question-row">
  <ul id="question-row-34160582" class="plus-card card-white question-row">

...
</div>

  • 同意 不同意
        ...
我对Reg Ex不是很有经验,我知道这可能是我的问题的原因,因此对于这个简单的问题,我深表歉意,但非常感谢您的帮助。

使用以定位器/符号开头和结尾:

List<WebElement> elements = SeleniumCommands.myDriver.findElements(By.cssSelector("[id^=assessment-answer-][id$=\"-1\"]"));
List elements=SeleniumCommands.myDriver.findElements(由.cssSelector(“[id^=assessment-answer-][id$=\”-1\”]);
您可能还需要等待元素变为可见:

WebDriverWait wait = new WebDriverWait(SeleniumCommands.myDriver, 5);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("[id^=assessment-answer-][id$=\"-1\"]")));

List<WebElement> elements = SeleniumCommands.myDriver.findElements(By.cssSelector("[id^=assessment-answer-][id$=\"-1\"]"));
WebDriverWait wait=newwebdriverwait(SeleniumCommands.myDriver,5);
wait.until(ExpectedConditions.visibilityOfElementLocated(由.cssSelector(“[id^=评估答案-][id$=\”-1\”]));
List elements=SeleniumCommands.myDriver.findElements(By.cssSelector(“[id^=assessment-answer-][id$=\”-1\”]);

您还可以在ID(或部分ID)的帮助下构造xpath来查找webelement。在这种情况下,您的代码应该如下所示:

List elements=SeleniumCommands.myDriver.findElements(By.xpath(“/*[contains(@id,'assessment-answer-'))]”)

要解释构造的xpath,请执行以下操作:

/
-在dom中的任何层次结构中查找元素

*
-标识标记名。如果我们知道标记名,我们可以传递相同的名称。如果不确定标签名称,请将其作为
*

[包含(XX,XX)]
-向xpath添加筛选器

@id
-筛选条件

评估答案-
-这是部分id(始终不变)

试试看


祝你好运。

这将是一个很好的答案,但我确实需要它以
“-1”
结尾。它不能仅仅以
评估答案-“
谢谢开始,但由于某些原因,它不起作用。我将提供更多的HTML在原来的;请继续关注。@lmcphers在进行此操作之前,请尝试使用双引号-已更新选择器。原始帖子已更新。让我知道这是否有帮助或者您是否需要其他帮助。@lmcphers好的,好的,让我们首先从一个健全性检查开始:
List elements=SeleniumCommands.myDriver.findElements(By.id(“assessment-answer-5713185-1”)-它是否找到元素?还有,关于这个:
List elements=SeleniumCommands.myDriver.findElements(By.cssSelector(“[id^=assessment-answer-]”)非常好的解释,谢谢你的评论。我很感激并将在继续使用Selenium时引用此内容。@lmcphers Xpath是一个替代选项。但问题是您不能在此处使用
ends-with()
检查id的结尾<代码>以
结尾仅是XPath 2.0的一部分。