Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何修复selenium web驱动程序运行过快的问题?_Javascript_Selenium_Selenium Webdriver - Fatal编程技术网

Javascript 如何修复selenium web驱动程序运行过快的问题?

Javascript 如何修复selenium web驱动程序运行过快的问题?,javascript,selenium,selenium-webdriver,Javascript,Selenium,Selenium Webdriver,没有什么是好的。建议我更好的选择。由于速度快,我无法以更好的方式检测执行情况。 这是我的密码: public static void main(String[] args) { //**********************************open ff WebDriver driver=new FirefoxDriver(); //**************************************maximize ff d

没有什么是好的。建议我更好的选择。由于速度快,我无法以更好的方式检测执行情况。 这是我的密码:

public static void main(String[] args) {

    //**********************************open ff
        WebDriver driver=new FirefoxDriver();
    //**************************************maximize ff 
        driver.manage().window().maximize();

            Logger log = Logger.getLogger("devpinoyLogger");
        driver.get("http://navvitistgvm.cloudapp.net/nvrppluginassist/Account/Login");

            log.debug("entring username");      
        driver.findElement(By.xpath("//*[@id='UserName']")).sendKeys("rpadmin");

            log.debug("entering password");
        driver.findElement(By.xpath("//*[@id='Password']")).sendKeys("Password123");

            log.debug("Clicking login");
        driver.findElement(By.xpath("//*[@id='loginForm']/form/div[4]/div/input")).click();

            log.debug("Clicking voucher");
        driver.findElement(By.xpath("html/body/nav/div[2]/div[2]/ul/li[2]/a")).click();



                log.debug("selecting search_voucher");

                 List<WebElement> elements=driver.findElements(By.id("VoucherType"));
                 //elements.get(0).click(); //GV
                 elements.get(1).click();  //GC
                 //elements.get(2).click();//AP

                 driver.manage().timeouts().setScriptTimeout(30, TimeUnit.SECONDS);

            driver.findElement(By.xpath("//*[@id='main']/form[2]/div[2]/input[4]")).click();
            driver.manage().timeouts().setScriptTimeout(30, TimeUnit.SECONDS);
                driver.findElement(By.xpath("//*[@id='main']/div[1]/span/a")).click();
    }
    }
publicstaticvoidmain(字符串[]args){
//**********************************开放式ff
WebDriver=newfirefoxdriver();
//**************************************最大化ff
driver.manage().window().maximize();
Logger log=Logger.getLogger(“devpinoyLogger”);
驱动程序。获取(“http://navvitistgvm.cloudapp.net/nvrppluginassist/Account/Login");
调试(“输入用户名”);
driver.findElement(By.xpath(“/*[@id='UserName'])).sendKeys(“rpadmin”);
log.debug(“输入密码”);
findElement(By.xpath(“/*[@id='Password'])).sendKeys(“Password123”);
调试(“单击登录”);
findElement(By.xpath(“//*[@id='loginForm']/form/div[4]/div/input”))。单击();
log.debug(“点击凭证”);
findelelement(By.xpath(“html/body/nav/div[2]/div[2]/ul/li[2]/a”)。单击();
log.debug(“选择搜索凭证”);
列表元素=driver.findElements(By.id(“VoucherType”);
//元素。获取(0)。单击();//GV
元素。获取(1)。单击();//GC
//元素。获取(2)。单击();//AP
driver.manage().timeouts().setScriptTimeout(30,TimeUnit.SECONDS);
findElement(By.xpath(“//*[@id='main']/form[2]/div[2]/input[4]”);
driver.manage().timeouts().setScriptTimeout(30,TimeUnit.SECONDS);
findelelement(By.xpath(“//*[@id='main']/div[1]/span/a”)。单击();
}
}

没有什么是好的。建议我更好的选择。由于速度太快,我无法以更好的方式检测执行情况。

如果在执行某个操作之后,在执行另一个操作之前,没有出现此类元素异常,请使用显式等待()


请不要添加一堆睡眠

所以这不是对你的问题的直接回答,这会减慢过程,但这是对我认为你的问题的回答

您不需要这些步骤来运行得更慢,但您需要的是确保在页面正确加载之前不运行任何步骤

您可以使用
WebDriverWait
elementlocated的可见性
来解决此问题

我在代码中添加了几行

import static org.openqa.selenium.support.ui.ExpectedConditions.visibilityOfElementLocated;
import org.openqa.selenium.support.ui.WebDriverWait;


public static void main(String[] args) {

  //**********************************open ff
  WebDriver driver = new FirefoxDriver();
  WebDriverWait wait = new WebDriverWait(driver, 30);
  //**************************************maximize ff 

  driver.manage().window().maximize();

  Logger log = Logger.getLogger("devpinoyLogger");
  driver.get("http://navvitistgvm.cloudapp.net/nvrppluginassist/Account/Login");
  // driver.get should block the execution of following steps untill the
  // page has loaded so this line below in theory shouldnt be needed.
  // Try it in your code and see for yourself
  // Wait till the username field is visible.
  wait.until(visibilityOfElementLocated(By.xpath("//*[@id='UserName']"))));

  log.debug("entring username");      
  driver.findElement(By.xpath("//*[@id='UserName']")).sendKeys("rpadmin");

  log.debug("entering password");
  driver.findElement(By.xpath("//*[@id='Password']")).sendKeys("Password123");

  log.debug("Clicking login");
  driver.findElement(By.xpath("//*[@id='loginForm']/form/div[4]/div/input")).click();

  // I assume here is your other issue, when clixking login the view changes
  // and your running this next command before the view has properly refreshed.
  // add a wait here as well.
  wait.until(visibilityOfElementLocated(By.xpath("html/body/nav/div[2]/div[2]/ul/li[2]/a")));

  log.debug("Clicking voucher");
  driver.findElement(By.xpath("html/body/nav/div[2]/div[2]/ul/li[2]/a")).click();

  log.debug("selecting search_voucher");

   List<WebElement> elements=driver.findElements(By.id("VoucherType"));
   //elements.get(0).click(); //GV
   elements.get(1).click();  //GC
   //elements.get(2).click();//AP

   driver.manage().timeouts().setScriptTimeout(30, TimeUnit.SECONDS);

  driver.findElement(By.xpath("//*[@id='main']/form[2]/div[2]/input[4]")).click();
  driver.manage().timeouts().setScriptTimeout(30, TimeUnit.SECONDS);
      driver.findElement(By.xpath("//*[@id='main']/div[1]/span/a")).click();
}
}

尝试一下第一种方法,这是一个更好的解决方案。

您需要使用fluent等待页面加载,或者在每次单击事件后等待特定元素加载,然后执行某些selenium api调用:

你可以在这里找到关于selenium如何流畅等待的文档

如果隐式和显式不能按预期工作,您可以尝试Thread.sleep(3000)(3秒)

我希望下面的链接澄清执行速度,

对于2020年寻求帮助的您,我建议您使用以下页面:


我使用了显式等待方法!很有帮助

你是说你的程序太快了,并问你怎么能让它慢下来?你能给你的问题补充一点细节吗,这样我可以更好地回答你。你到底有什么问题?是的。正因为如此,有时它不会给出这样的元素“发现异常”。@cOnly slenium web驱动程序会快速单击或输入每个细节。我需要降低整个过程的速度。您希望每个命令之间都有更多的时间运行吗?您说您没有得到这样的元素异常,这表明测试运行得有点太早,而不是太快。哪些元素会出现这种异常?我已经尝试了你给出的链接。但它仍然不起作用。你能根据我的代码给我一些建议吗???似乎点击后有一些变化,所以你需要等待点击事件后状态的一些变化。例如,如果在单击“登录”之后,凭证按钮/链接甚至不在DOM中,则必须等待该按钮/链接出现。是的,我只想减慢代码的执行速度。你能帮我吗?更新答案,以给出一个示例,说明如何做你想做的事,我仍然建议使用第一个解决方案,它会更好,并且会阻止您获得这些异常
public void waitAndClick(Xpath) {
  driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
  driver.findElement(By.xpath(Xpath)).click();
}