使用 selenium java 我想自动化一个包含 11 个问题的调查页面。每个问题都有多个答案
Using selenium java I want to automate a survey page, with 11 questions. Every question has multiple answers
我的调查页面的第一页显示“select 年龄”和“select 性别”。在我select这些选项之后,显示“继续”按钮,然后进入下一页。每页都有一个问题。
HTML代码是:
<div id="survey-container"><div id="navigation-survey" style="display: none;"><strong>Pas NaN<span> / 11</span></strong><ul><li style="display: none;"><a class="isDisabled">1</a></li><li style="display: none;"><a class="isDisabled">2</a></li><li><a class="isDisabled">3</a></li><li><a class="isDisabled">4</a></li><li><a class="isDisabled">5</a></li><li><a class="isDisabled">6</a></li><li><a class="isDisabled">7</a></li><li><a class="isDisabled">8</a></li><li><a class="isDisabled">9</a></li><li><a class="isDisabled">10</a></li><li><a class="isDisabled">11</a></li><li><a class="isDisabled">12</a></li><li><a class="isDisabled">14</a></li></ul></div> <div class="start-survey-container"><div class="questions columns-2"><div><strong class="title">NaN. Selecteaza varsta</strong> <p class="description" style="display: none;"></p> <div class="question"><strong class="title">Selecteaza varsta</strong> <div class="answers"><label><img class="icon" style="display: none;"> <input type="radio" name="select-1" value="0"> 18-30 </label></div><div class="answers"><label><img class="icon" style="display: none;"> <input type="radio" name="select-1" value="1"> 31-50 </label></div><div class="answers"><label><img class="icon" style="display: none;">
<input type="radio" name="select-1" value="2"> 51-70 </label></div><div class="answers"><label><img class="icon" style="display: none;"> <input type="radio" name="select-1" value="3"> 71- </label></div> </div> <div class="disclaimer" style="display: none;"><label><input type="checkbox" id="disclaimer"> Text</p></div> <div classname="clearfix"></div> <div class="actions"><a id="prev" class="btn gray" style="display: none;"> Inapoi </a> <a id="next" class="btn isDisabled" style="display: none;"> Continua </a></div></div>
<div><strong class="title">NaN. Selecteaza sex</strong> <p class="description" style="display: none;"></p> <div class="question"><strong class="title">Selecteaza sex</strong> <div class="answers"><label><img class="icon" style="display: none;"> <input type="radio" name="select-2" value="0"> Masculin </label></div><div class="answers"><label><img class="icon" style="display: none;"> <input type="radio" name="select-2" value="1"> Feminin </label></div> </div>
问题是您创建的任何定位器都无法访问所需的项目。也许每个问题后都需要等待一段时间?
我的定位器:
@FindBy(css = "#survey-container input[type='radio'], input[value='0']")
WebElement years;
@FindBy(css = "#survey-container > div.start-survey-container > div.questions.columns-2 > div:nth-child(2) > div.question > div:nth-child(3) > label > input[type=radio]")
WebElement sex;
@FindBy(css = "#survey-container > div.start-survey-container > div.questions.columns-2 > div:nth-child(1) > div.question > div:nth-child(2) > label")
WebElement startSurvey;
有没有更简单的方法来识别所需的项目?您可以向我推荐一些与调查页面自动化相关的教程吗?
如果问题不是很清楚,请告诉我如何根据 Whosebug 规则写出好的问题,我将不胜感激。新镜头在这里。谢谢!
问题如下:
survey
流程应该如下所示:
select 年龄 - 可能是 drop down
或 input field
.
select sex - 大多数情况下会是 radio
button
.
您的定位器:
@FindBy(css = "#survey-container > div.start-survey-container > div.questions.columns-2 > div:nth-child(2) > div.question > div:nth-child(3) > label > input[type=radio]")
WebElement sex;
我相信用 CSS reference here
可以写得更可靠
有没有更简单的方法来识别所需的项目? - 按照上面的link
您可以向我推荐一些与调查页面自动化相关的教程吗? - 我不认为教程 link 仅对调查页面有很大帮助。虽然我建议你看看 XPATH reference
硒-Java Official documentation
初学者不妨看看here
总是使用 ExplicitWait 像这样的东西:
new WebDriverWait(driver, Duration.ofSeconds(3)).until(ExpectedConditions.elementToBeClickable(By.xpath("//a/h3")));
你能用下面的代码检查一下吗,我希望这会有所帮助
WebElement element = driver.findElement(By.xpath("((//input[@name='select-
1'])[1])"));
WebElement element2 = driver.findElement(By.xpath(((//input[@name='select-
2'])[1])"));
WebElement element3 = driver.findElement(By.xpath("//*[@id='start-
survey']"));
JavascriptExecutor executor = (JavascriptExecutor) driver;
executor.executeScript("arguments[0].click();", element);
executor.executeScript("arguments[0].click();", element2);
executor.executeScript("arguments[0].click();", element3);
我已经使用 JavascriptExecutor 接口与元素进行交互,如前所述,至少这是有效的,您可以根据需要对其进行增强。
- 没有关注@FindBy。
看看这是否有效:-
driver.findElement(By.xpath(".//label[text() =' 31-50 ']")).click();
driver.findElement(By.xpath(".//label[text() = ' Masculin ']")).click();
driver.findElement(By.xpath(".//button[text()='Continue']")).click();
我的调查页面的第一页显示“select 年龄”和“select 性别”。在我select这些选项之后,显示“继续”按钮,然后进入下一页。每页都有一个问题。
HTML代码是:
<div id="survey-container"><div id="navigation-survey" style="display: none;"><strong>Pas NaN<span> / 11</span></strong><ul><li style="display: none;"><a class="isDisabled">1</a></li><li style="display: none;"><a class="isDisabled">2</a></li><li><a class="isDisabled">3</a></li><li><a class="isDisabled">4</a></li><li><a class="isDisabled">5</a></li><li><a class="isDisabled">6</a></li><li><a class="isDisabled">7</a></li><li><a class="isDisabled">8</a></li><li><a class="isDisabled">9</a></li><li><a class="isDisabled">10</a></li><li><a class="isDisabled">11</a></li><li><a class="isDisabled">12</a></li><li><a class="isDisabled">14</a></li></ul></div> <div class="start-survey-container"><div class="questions columns-2"><div><strong class="title">NaN. Selecteaza varsta</strong> <p class="description" style="display: none;"></p> <div class="question"><strong class="title">Selecteaza varsta</strong> <div class="answers"><label><img class="icon" style="display: none;"> <input type="radio" name="select-1" value="0"> 18-30 </label></div><div class="answers"><label><img class="icon" style="display: none;"> <input type="radio" name="select-1" value="1"> 31-50 </label></div><div class="answers"><label><img class="icon" style="display: none;">
<input type="radio" name="select-1" value="2"> 51-70 </label></div><div class="answers"><label><img class="icon" style="display: none;"> <input type="radio" name="select-1" value="3"> 71- </label></div> </div> <div class="disclaimer" style="display: none;"><label><input type="checkbox" id="disclaimer"> Text</p></div> <div classname="clearfix"></div> <div class="actions"><a id="prev" class="btn gray" style="display: none;"> Inapoi </a> <a id="next" class="btn isDisabled" style="display: none;"> Continua </a></div></div>
<div><strong class="title">NaN. Selecteaza sex</strong> <p class="description" style="display: none;"></p> <div class="question"><strong class="title">Selecteaza sex</strong> <div class="answers"><label><img class="icon" style="display: none;"> <input type="radio" name="select-2" value="0"> Masculin </label></div><div class="answers"><label><img class="icon" style="display: none;"> <input type="radio" name="select-2" value="1"> Feminin </label></div> </div>
问题是您创建的任何定位器都无法访问所需的项目。也许每个问题后都需要等待一段时间?
我的定位器:
@FindBy(css = "#survey-container input[type='radio'], input[value='0']")
WebElement years;
@FindBy(css = "#survey-container > div.start-survey-container > div.questions.columns-2 > div:nth-child(2) > div.question > div:nth-child(3) > label > input[type=radio]")
WebElement sex;
@FindBy(css = "#survey-container > div.start-survey-container > div.questions.columns-2 > div:nth-child(1) > div.question > div:nth-child(2) > label")
WebElement startSurvey;
有没有更简单的方法来识别所需的项目?您可以向我推荐一些与调查页面自动化相关的教程吗?
如果问题不是很清楚,请告诉我如何根据 Whosebug 规则写出好的问题,我将不胜感激。新镜头在这里。谢谢!
问题如下: survey
流程应该如下所示:
select 年龄 - 可能是
drop down
或input field
.select sex - 大多数情况下会是
radio
button
.
您的定位器:
@FindBy(css = "#survey-container > div.start-survey-container > div.questions.columns-2 > div:nth-child(2) > div.question > div:nth-child(3) > label > input[type=radio]")
WebElement sex;
我相信用 CSS reference here
可以写得更可靠有没有更简单的方法来识别所需的项目? - 按照上面的link
您可以向我推荐一些与调查页面自动化相关的教程吗? - 我不认为教程 link 仅对调查页面有很大帮助。虽然我建议你看看 XPATH reference
硒-Java Official documentation
初学者不妨看看here
总是使用 ExplicitWait 像这样的东西:
new WebDriverWait(driver, Duration.ofSeconds(3)).until(ExpectedConditions.elementToBeClickable(By.xpath("//a/h3")));
你能用下面的代码检查一下吗,我希望这会有所帮助
WebElement element = driver.findElement(By.xpath("((//input[@name='select-
1'])[1])"));
WebElement element2 = driver.findElement(By.xpath(((//input[@name='select-
2'])[1])"));
WebElement element3 = driver.findElement(By.xpath("//*[@id='start-
survey']"));
JavascriptExecutor executor = (JavascriptExecutor) driver;
executor.executeScript("arguments[0].click();", element);
executor.executeScript("arguments[0].click();", element2);
executor.executeScript("arguments[0].click();", element3);
我已经使用 JavascriptExecutor 接口与元素进行交互,如前所述,至少这是有效的,您可以根据需要对其进行增强。
- 没有关注@FindBy。
看看这是否有效:-
driver.findElement(By.xpath(".//label[text() =' 31-50 ']")).click();
driver.findElement(By.xpath(".//label[text() = ' Masculin ']")).click();
driver.findElement(By.xpath(".//button[text()='Continue']")).click();