首页 > 解决方案 > 使用 Selenium 时,不提交明显选择的表单选项(手动测试时有效)

问题描述

我正在为具有报告选项的页面设置自动化测试。例如,用户可以选择他们想要包含在报告中的状态:

<select _ngcontent-c16="" class="multiSelect ng-valid ng-dirty ng-touched" formcontrolname="formVal" multiple="" name="Status"><!----><option _ngcontent-c16="" value="0: ''">Any Status</option><!----><!----><!----><option _ngcontent-c16="" value="1: 'draft'">Submission in Progress</option><option _ngcontent-c16="" value="2: 'submitted'">Ready for Decision</option><option _ngcontent-c16="" value="3: 'checklist'">Ready for Checklist</option><option _ngcontent-c16="" value="4: 'minorRevisions'">Waiting for Revisions (Minor)</option><option _ngcontent-c16="" value="5: 'majorRevisions'">Waiting for Revisions (Major)</option><option _ngcontent-c16="" value="6: 'accepted'">Ready for Delivery</option><option _ngcontent-c16="" value="7: 'pendingDelivery'">Delivery in Progress</option><option _ngcontent-c16="" value="8: 'delivered'">Delivered to ProQuest</option><option _ngcontent-c16="" value="9: 'withdrawn'">Withdrawn</option><option _ngcontent-c16="" value="10: 'published'">Published by ProQuest</option><option _ngcontent-c16="" value="11: 'rejected'">Rejected</option><option _ngcontent-c16="" value="12: 'committeeReview'">Committee Review</option><!----><!----><!----></select>

该测试旨在选择不同的选项,然后检查生成的报告以确保它仅包含指定的信息。我遇到了一个问题,表单选项似乎被明显选中,但实际上并没有被提交。正如您在下面看到的,我已经尝试过使用 Select 和通过 css 定位并单击(状态和上次事件):

    commUtil.UnSelectOptionByText(LOC_STATUS_LISTBOX, "Any Status");
    commUtil.UnSelectOptionByText(LOC_LASTEVENT_LISTBOX, "Any Last Event");
    
    /*
    selectOptionByText(LOC_STATUS_LISTBOX, status);
    selectOptionByText(LOC_LASTEVENT_LISTBOX, lastEvent);
    */
            
    getDriver().findElement(By.cssSelector(LOC_LASTEVENT_LISTBOX + " option[value*='" + lastEvent + "']")).click();
    getDriver().findElement(By.cssSelector(LOC_STATUS_LISTBOX + " option[value*='" + status + "']")).click();
    
    getDriver().findElement(By.cssSelector(LOC_FROM_SELECTOR)).sendKeys(from);
    getDriver().findElement(By.cssSelector(LOC_TO_SELECTOR)).sendKeys(to);
    
    setEmailTo(email);
    
    click(LOC_RUNREPORT_BOTTOM_BTN, null);

当测试运行时,任何一种方法都可以明显看出一切都是正确的。问题是,无论选择什么选项实际上都没有被提交。

这是手动完成时的请求示例:

{siteId: 5, submissionStatus: ["withdrawn"], dateFrom: "2018-01-01", dateTo: "2019-09-01",…}
dateFrom: "2018-01-01"
dateTo: "2019-09-01"
deliveryMethod: "email"
emailTo: "validateRunReportAttachment@gmail.com"
reportFields: ["siteSubmId", "submissionStatus", "submitDate", "title", "keyword", "subjectCategory", "tag",…]
siteId: 5
submissionStatus: ["withdrawn"] 

这是通过自动化完成时相同请求的示例:

{siteId: 5, dateFrom: "2018-01-01", dateTo: "2019-09-01",…}
dateFrom: "2018-01-01"
dateTo: "2019-09-01"
deliveryMethod: "email"
emailTo: "validateRunReportAttachment@gmail.com"
reportFields: ["siteSubmId", "submissionStatus", "submitDate", "title", "keyword", "subjectCategory", "tag",…]
siteId: 5

有没有人遇到过类似的事情?一般有什么建议吗?同样,手动运行报告时,我从来没有遇到过问题。

标签: javaselenium

解决方案


你能试着通过Javascript点击下面的2个元素吗

   JavascriptExecutor executor = (JavascriptExecutor) driver;
    executor.executeScript("arguments[0].click();", getDriver().findElement(By.cssSelector(LOC_LASTEVENT_LISTBOX + " option[value*='" + lastEvent + "']")));
executor.executeScript("arguments[0].click();", getDriver().findElement(By.cssSelector(LOC_STATUS_LISTBOX + " option[value*='" + status + "']")));

推荐阅读