代码之家  ›  专栏  ›  技术社区  ›  Chintamani Manjare

Chrome在使用selenium上传图像时崩溃,如何修复?

  •  2
  • Chintamani Manjare  · 技术社区  · 6 年前

    我正在使用selenium和appium在Android手机上实现移动chrome浏览器的自动化。 我已经通过

    android chrome浏览器在真实设备上的所有其他测试用例都已成功运行。但是为了上传图片,浏览器正在崩溃。

     public class UploadPhotoPage extends TestBase {
    
        // Page Factory Object Repository
        @FindBy(id = "file-upload")
        WebElement fileUpload;
    
        // Initialising the page object
        public UploadPhotoPage() {
        PageFactory.initElements(driver, this);
        }
    
        // Actions
        public void uploadphotos(String imagePath) throws AWTException, InterruptedException {
        fileUpload.sendKeys(imagePath);
        }
    }
    

    这里怎么了?

    appium服务器上的错误日志:

    [JSONWP Proxy]将“/wd/hub/session/34e405a5-1bad-4711-9e1c-956e2d7391f6/element/0.62728711375717-18/text”匹配到命令名“getText” [JSONWP Proxy]将[GET/wd/hub/session/34e405a5-1bad-4711-9e1c-956e2d7391f6/element/0.62728711375717-18/text]代理到[GET http://127.0.0.1:8003/wd/hub/session/adb1415c77099095355e619b36dc5e1e/element/0.6272871137575717-18/text] 正文:{} [JSONWP Proxy]获得了状态为200的响应:“{\”sessionId\“:\”adb1415c770909555e619b36dc5e1e\“,\”status\“:10,\”value\“:{\”message\“:\”stale element reference:元素未附加到页面文档\n(会话信息:chrome=70.0.3538.64)\n(驱动程序信息:chromedriver=2.42.591088(7b2b2b2dca23cca0862f674758c9a3933e685c27d5),平台=Windows NT 6.1.7601 SP1 x86\U 64)\“}” [W3C]位于tryCatch(C:\Users\chints\AppData\Local\Programs\Appium\resources\app\node\u modules\Appium\node\u modules\babel runtime\regenerator\runtime.js:67:40) [W3C]在GeneratorFunctionPrototype.invoke[作为调用](C:\Users\chints\AppData\Local\Programs\Appium\resources\app\node\u modules\Appium\node\u modules\babel runtime\regenerator\runtime.js:315:22) [W3C]在GeneratorFunctionPrototype.prototype.(匿名函数)[as next](C:\Users\chints\AppData\Local\Programs\Appium\resources\app\node\u modules\Appium\node\u modules\babel runtime\regenerator\runtime.js:100:21) [W3C]位于GeneratorFunctionPrototype.invoke(C:\Users\chints\AppData\Local\Programs\Appium\resources\app\node\u modules\Appium\node\u modules\babel runtime\regenerator\runtime.js:136:37) [MJSONWP]将JSONWP错误代码10与StaleElementReferenceError匹配 [HTTP地址] [HTTP]-->GET/wd/hub/session/34e405a5-1bad-4711-9e1c-956e2d7391f6/元素/0.62728711375717-18/text [HTTP]{} [W3C]驱动程序代理处于活动状态,通过HTTP代理传递请求 http://127.0.0.1:8003/wd/hub/session/adb1415c770909535e619b36dc5e1e/element/0.62728711375717-18/text] 正文:{} [JSONWP Proxy]获得了状态为200的响应:“{\”sessionId\“:\”adb1415c770909555e619b36dc5e1e\“,\”status\“:10,\”value\“:{\”message\“:\”stale element reference:元素未附加到页面文档\n(会话信息:chrome=70.0.3538.64)\n(驱动程序信息:chromedriver=2.42.591088(7b2b2b2dca23cca0862f674758c9a3933e685c27d5),平台=Windows NT 6.1.7601 SP1 x86\U 64)\“}” [W3C]在运行命令时遇到内部错误:ProxyRequestError:无法将命令代理到远程服务器。原始错误:对/wd/hub/session/34e405a5-1bad-4711-9e1c-956e2d7391f6/element/0.62728711375717-18/text的请求失败 [W3C]位于JWProxy.proxy$(C:\Users\chints\AppData\Local\Programs\Appium\resources\app\node\u modules\Appium\node\u modules\Appium base driver\lib\jsonwp proxy\proxy.js:182:13) [W3C]位于tryCatch(C:\Users\chints\AppData\Local\Programs\Appium\resources\app\node\u modules\Appium\node\u modules\babel runtime\regenerator\runtime.js:67:40) [W3C]在GeneratorFunctionPrototype.prototype.(匿名函数)[as next](C:\Users\chints\AppData\Local\Programs\Appium\resources\app\node\u modules\Appium\node\u modules\babel runtime\regenerator\runtime.js:100:21) [W3C]位于GeneratorFunctionPrototype.invoke(C:\Users\chints\AppData\Local\Programs\Appium\resources\app\node\u modules\Appium\node\u modules\babel runtime\regenerator\runtime.js:136:37) [W3C]在 [MJSONWP]将JSONWP错误代码10与StaleElementReferenceError匹配

    以下是我设置的功能

            DesiredCapabilities capabilities = new DesiredCapabilities();
            capabilities.setCapability(CapabilityType.BROWSER_NAME, "");
            capabilities.setCapability("deviceName", "ONEPLUS A5010");
            capabilities.setCapability("platformVersion", "8.1.0");
            capabilities.setCapability("platformName", "Android");
            capabilities.setCapability("browserName", "Chrome");
            capabilities.setCapability("deviceId", "XXX.XX.XX.XXX:5555");
            capabilities.setCapability("autoGrantPermissions", true);
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   Chintamani Manjare    6 年前

    1) 过时的元素问题是因为另一个元素,所以它不是根本原因。 2) 图像路径应该是移动图像,而不是桌面上的图像。这是个大问题。

        2
  •  0
  •   Amit Jain    6 年前

    一个快速解决方案 StaleElementException 就是再次在 DOM Exception 为了这个 WebElement

     public class UploadPhotoPage extends TestBase {
    
    // Page Factory Object Repository
    @FindBy(id = "file-upload")
    WebElement fileUpload;
    
    // Initialising the page object
    public UploadPhotoPage() {
    PageFactory.initElements(driver, this);
    }
    
    // Actions
    public void uploadphotos(String imagePath) throws AWTException, InterruptedException {
    try {
    fileUpload.sendKeys(imagePath);
    }
    catch(StaleElementException ste){
    driver.findElement(By.id("file-upload")).sendKeys(imagePath);
    }
        }
    }