【问题标题】:How Can i Click on The Same Button For 99 Times or Till The Code Ends?我怎样才能点击同一个按钮 99 次或直到代码结束?
【发布时间】:2018-12-06 09:56:36
【问题描述】:

需要解决方案,请帮忙。

我有相同的跳过按钮类型,所有产品的名称 id 属性。只有 Xpath 发生了变化。请指导我如何快速单击 99 个相同的跳过按钮和一个取消弹出按钮。

这是我的跳过按钮图片

这里是我的图片,点击跳过后,我会弹出这样的画面。我需要点击取消

我将附上跳过和取消的代码。

从跳过按钮的 Html 代码中,我选择了一个 Xpath,它只工作,

我的 Xpath 是

//input[@id='CustomPaging_GridView_gv_edit1_0'])-Product1
 //input[@id='CustomPaging_GridView_gv_edit1_1'])-Product2
  //input[@id='CustomPaging_GridView_gv_edit1_2'])-Product3

Like this 99 Products I Have To Write Xpath. It's Going Too Lengthy

跳过按钮的 HTML 代码是

 <input type="submit" name="CustomPaging_GridView$ctl02$gv_edit1" value="SKIP" onclick="product_skip(37639 );" id="CustomPaging_GridView_gv_edit1_0" class="button2">

取消按钮的 HTML 代码,

<div class="modal-footer">
                <span id="prcid" style="display:none;">processing...</span>
                <button type="button" id="skipok" onclick="skipoverall(this)" class="btn btn-primary" data-id="37639">Ok</button>
                <button type="button" class="btn btn-secondary" data-dismiss="modal">Cancel</button>
            </div>

PS:每次单击“跳过”按钮时,我都需要同时单击“取消”按钮。像这样我需要点击 99 种产品的跳过按钮和取消按钮

【问题讨论】:

  • 要匹配您的输入,您可以使用部分 ID 匹配。 //*[contains(@id, 'CustomPaging_GridView_gv_edit1_')] 或 //*[starts-with(@id, 'CustomPaging_GridView_gv_edit1_')]
  • 好吧@JonathanHamel一开始我只是想到了这个,但突然想到为什么我们不能使用for循环函数并同时点击按钮99次?
  • @koushick,您还可以检查条件直到显示按钮,可能正在使用 while 循环或类似的东西。因此,不限于 99 或任何数字。
  • @eduPeeth 我无法理解!请问你能详细说明吗?我卡住了!
  • 几件事,当你点击跳过按钮时会发生什么,点击取消后它会消失吗?页面上的所有跳过按钮是否同时可用?

标签: javascript html selenium testing selenium-webdriver


【解决方案1】:

试试-

public void clickSkipAndCancel(){
            List<WebElement> elements = driver.findElements(By.xpath("//input[contains(@id, 'CustomPaging_GridView_gv_edit1_')]"));
            for (Iterator<WebElement> iterator = elements.iterator(); iterator.hasNext();) {
                WebElement webElement = (WebElement) iterator.next();
                new WebDriverWait(driver, 10)
                .ignoring(StaleElementReferenceException.class)
                .until(new Predicate<WebDriver>() 
                       {
                         @Override
                         public boolean apply(@Nullable WebDriver driver) {
                         webElement.click();
                         return true;
                       }
});

                driver.findElement(By.xpath("//button[text()='Cancel']")).click();
            }                
        }

你必须导入 -

import org.openqa.selenium.WebElement;
import java.util.Iterator;
import java.util.List;

让我知道它是否适合你。

【讨论】:

  • Down 我已经发布了这个问题,我尝试了上面的方法它正在工作。但它只能在某个时间点内工作。
  • @koushick,我在上面编辑了一些代码。你介意试试吗?让我知道它是否有效。
  • 感谢您的合作,同样,它点击了一个时间点,现在抛出了不同的未知错误。 :(
  • 现在请再试一次。另外,你能放一个计数器,看看它点击了多少次。如果您可以放置​​一个调试器并查看它失败的地方。
  • @koushick,如果对你有任何帮助,我很高兴。请点赞。
【解决方案2】:

因此,鉴于信息我会尝试以下类型的代码。既然你没有提到语言,我会在 python 中给出逻辑

elems = driver.find_elements_by_xpath("//input[starts-with(@id, 'CustomPaging_GridView_gv_edit1_')]")

for elem in elems:
    elem.click()
    driver.find_element_by_xpath("//button[text()='Cancel']").click()

【讨论】:

  • 谢谢,@Tarun Lalwani,你能用 Java 提出建议吗?
  • 只有4行尝试自己在Java中转换,你会更好地理解这一点
猜你喜欢
  • 2017-08-20
  • 1970-01-01
  • 2015-05-04
  • 2022-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-27
  • 1970-01-01
相关资源
最近更新 更多