简单Selenium正则表达式Java
我不熟悉如何在Selenium中使用Reg-Ex,因此希望我能在这方面得到一些帮助。目前,当它运行时,它没有找到任何元素,这并不奇怪简单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-
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的一部分。