Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.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
Java Webdriver:字段值半可预测地消失,可能是时间问题_Java_Javascript_Selenium_Webdriver_Benchmarking - Fatal编程技术网

Java Webdriver:字段值半可预测地消失,可能是时间问题

Java Webdriver:字段值半可预测地消失,可能是时间问题,java,javascript,selenium,webdriver,benchmarking,Java,Javascript,Selenium,Webdriver,Benchmarking,免责声明:我对Java、Webdriver和HTML相对较新,除了Lincoln夫人,我对javascript一无所知。。。缺乏知识和经验的领域应在描述中变得明显。抱歉,篇幅太长了,但指导方针说要具体透彻 最接近的类似情况如下:。但这并不完全相同,而且这个解决方案也没有帮助 场景:创建应用程序创建新用户帐户能力的测试自动化 基本步骤:登录, 导航到新用户帐户页面, 将帐户类别更改为住宅, 填写必填字段, 单击提交, 确认已创建用户帐户 问题:它可以填充数据字段。它们都在一页纸上。运行时,必填字段

免责声明:我对Java、Webdriver和HTML相对较新,除了Lincoln夫人,我对javascript一无所知。。。缺乏知识和经验的领域应在描述中变得明显。抱歉,篇幅太长了,但指导方针说要具体透彻

最接近的类似情况如下:。但这并不完全相同,而且这个解决方案也没有帮助

场景:创建应用程序创建新用户帐户能力的测试自动化

基本步骤:登录, 导航到新用户帐户页面, 将帐户类别更改为住宅, 填写必填字段, 单击提交, 确认已创建用户帐户

问题:它可以填充数据字段。它们都在一页纸上。运行时,必填字段将填充数据。我可以看到数据在填充时显示,但随后,许多初始字段在进入提交步骤之前丢失了数据。有时是第一个字段,有时是第一个和第二个字段,有时是前三个字段,等等

我很确定这是一个时间问题。总是第一个填写的字段丢失数据。我运行了一个实验,以相反的顺序填充字段,并反转了代码中的循环。这也是第一个丢失数据的字段

在填充开始后,页面似乎正在刷新,这就是问题所在。我确实有一个显式等待页面加载的过程,而且总是有效的。我选择了不使用隐式等待

进一步的研究表明这是一个普遍的问题。我现在最好的猜测是,所有元素都被呈现,然后大量javascript正在运行,并导致页面在字段填充开始后刷新

我已经看到了很多关于如何确定页面何时完成加载的问题,包括javascript,但我还没有看到可靠的解决方案

其他信息:该应用程序正在force.com上运行。 到目前为止,我只在Firefox上尝试过这个。 我不知道代码是否有用,但我已经包含了相关的部分。 字段的XPath和值位于fieldLoc和fieldText数组中

任何想法或建议都将不胜感激

    // change Category to Residential, i.e. value=100
    WebElement dropDownListBox = wd.findElementByXPath(xpCategory); 
    Select clickThis = new Select(dropDownListBox); 
    clickThis.selectByValue(tCategory); 
    // wait for the page to refresh by looking for several elements Footer
    new WebDriverWait(wd, wSecPage).until(
            ExpectedConditions.textToBePresentInElementLocated(By.xpath(xpFooter),
                    tFooter));
    new WebDriverWait(wd, wSecPage).until(
            ExpectedConditions.elementToBeClickable(By.xpath(xpCancel)));

    for (int i = 0; i < len; i++) {
        // select value appropriately if a dropdownbox (location ends with "select")
        if (fieldLoc[i].endsWith("select")) {
            dropDownListBox = wd.findElementByXPath(fieldLoc[i]); 
            clickThis = new Select(dropDownListBox); 
            clickThis.selectByValue(fieldText[i]);
        } else {
            // otherwise send text value to text box
            wd.findElementByXPath(fieldLoc[i]).sendKeys(fieldText[i]);
        }
    }
    // tab out of last field in order for Submit to enable

    wd.findElementByXPath(fieldLoc[len-1]).sendKeys(Keys.TAB);

    // click Submit
    wd.findElementByXPath(xpSubmit).click();

您是否有任何影响字段值的异步操作?如果可能,请向开发人员寻求有关此问题的帮助。他知道表单是如何工作的,他可以提出一些建议,也可以更改代码以使表单更易于测试。不幸的是,开发团队是离岸承包商,到目前为止质量似乎不可靠,因此获取此类信息并不容易。不管怎样,谢谢你的建议。为了解决这个问题,我最终确定,在我正在测试的情况下,脚本正在从页面中删除一些字段。因此,我可以等待,直到字段消失,然后继续。这不是绝对确定的,但它现在起作用。