Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Не проходит выполнение


(Александр Трофимович) #1

Есть два куска кода:
1.

    driver.switchTo().frame("BRSPAY"); 
    	    for (int second = 0;; second++) {
    	    	if (second >= 600000) fail("timeout");
    	    	try { if (isElementPresent(By.linkText("Новый договор"))) break; } catch (Exception e) {}
    	    	Thread.sleep(10000);
    	    }    
    	    driver.findElement(By.linkText("Новый договор")).click();    
    	    driver.switchTo().frame("EXECUTE_ACTION");
    	    for (int second = 0;; second++) {
    	    	if (second >= 600000) fail("timeout");
    	    	try { if (isElementPresent(By.id("c1::sn"))) break; } catch (Exception e) {}
    	    	Thread.sleep(5000);
    	    }    
    	    driver.findElement(By.id("c1::sn")).click();
    	    for (int second = 0;; second++) {
    	    	if (second >= 600000) fail("timeout");
    	    	try { if ("8300000".equals(driver.findElement(By.cssSelector("td.xzv")).getText())) break; } catch (Exception e) {}
    	    	Thread.sleep(5000);
    	    }
    	    driver.findElement(By.name("t1:_afrFltrc5")).click();
    	    driver.findElement(By.name("t1:_afrFltrc5")).sendKeys("8300001"  + Keys.ENTER);
    	    driver.findElement(By.cssSelector("span.x12l")).click();
    	    for (int second = 0;; second++) {
    	    	if (second >= 60) fail("timeout");
    	    	try { if ("8300010".equals(driver.findElement(By.cssSelector("td.xzv")).getText())) break; } catch (Exception e) {}
    	    	Thread.sleep(5000);
    	    }
    	    driver.findElement(By.cssSelector("#ctb2 > a.x12k > span.x12l")).click();
                driver.switchTo().defaultContent();
    	    driver.switchTo().defaultContent();
    driver.switchTo().frame("BRSPAY");
    	    for (int second = 0;; second++) {
    	    	if (second >= 600000) fail("timeout");
    	    	try { if (isElementPresent(By.id("pt3:pc1:tTable:0:cilA::icon"))) break; } catch (Exception e) {}
    	    	Thread.sleep(10000);
    	    }    
    	    driver.findElement(By.id("pt3:pc1:tTable:0:cilA::icon")).click();
    	    for (int second = 0;; second++) {
    	    	if (second >= 600000) fail("timeout");
    	    	try { if (isElementPresent(By.xpath("//tr[@id='pt3:miContractOper']/td[2]"))) break; } catch (Exception e) {}
    	    	Thread.sleep(10000);
    	    }    
    	    driver.findElement(By.xpath("//tr[@id='pt3:miContractOper']/td[2]")).click();
    	    Thread.sleep(10000);
    	    driver.switchTo().frame("EXECUTE_ACTION");
    	    for (int second = 0;; second++) {
    	    	if (second >= 600000) fail("timeout");
    	    	try { if (isElementPresent(By.id("c1::sn"))) break; } catch (Exception e) {}
    	    	Thread.sleep(10000);
    	    }    
    	    driver.findElement(By.id("c1::sn")).click();
    	    driver.findElement(By.xpath("//div[@id='t1::db']/table/tbody/tr[2]/td[2]")).click();
    	    driver.findElement(By.cssSelector("span.x12l")).click();
    	    driver.switchTo().defaultContent();
    	    driver.switchTo().defaultContent();

По отдельности работают, нормально. А вот в месте не работают, пишет, что не может найти frame driver.switchTo().frame(“EXECUTE_ACTION”) во втором коде. Может кто-нить подскажет в чем дело?


(5am) #2

вот это я понимаю - нажористые слипы ! :+1:


(Александр Трофимович) #3

Что б наверняка.


(Александр Трофимович) #4

А по делу?


(Александр Таранков) #5

Что значит вместе? Идут друг за другом? Перемешаны через строчку?

Прямо так и пишет? Может хоть исключение кидает?


(Александр Таранков) #6

Ну и про WebDriverWait читать срочно.
И про ООП… хоть ожидания-то можно в отдельный метод вынести, невозможно же код читать


(Александр Трофимович) #7

Что значит вместе? Идут друг за другом? Перемешаны через строчку?

Идут друг за другом, сначала первый, а потом второй

Прямо так и пишет? Может хоть исключение кидает?


org.openqa.selenium.NoSuchFrameException: Unable to locate frame: EXECUTE_ACTION
Command duration or timeout: 30.08 seconds
Build info: version: '2.44.0', revision: '76d78cf', time: '2014-10-23 20:02:37'
System info: host: 'TROFIMOVICH', ip: '192.168.255.73', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_31'
Driver info: org.openqa.selenium.firefox.FirefoxDriver
Capabilities [{applicationCacheEnabled=true, rotatable=false, handlesAlerts=true, databaseEnabled=true, version=35.0, platform=WINDOWS, nativeEvents=false, acceptSslCerts=true, webStorageEnabled=true, locationContextEnabled=true, browserName=firefox, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true}]
Session ID: 04a21b8a-0f3b-46a9-99e0-15eb892887ef
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)...

(Александр Таранков) #8

Логично предположить, что в таком случае первый кусок кода приводит страницу в такое состояние, в котором второй код не находит нужный фрейм


(Александр Трофимович) #9

Но были же сделаны в первом коде driver.switchTo().defaultContent();
Логично, что он их должен сбросить.


(Александр Таранков) #10

Это сбрасывает контекст WebDriver-а, а не состояние страницы. Видимо действия, которые выполняет первый кусок кода, переводят приложение на какую-то страницу, в которой тоже есть фрейм BRSPAY, но нет фрейма EXECUTE_ACTION


(Александр Трофимович) #11

При записи через IDE, фрейм виден, да и так при просмотре кода:

// ERROR: Caught exception [ERROR: Unsupported command [selectFrame | BRSPAY | ]]
    driver.findElement(By.linkText("Новый договор")).click();
    // ERROR: Caught exception [ERROR: Unsupported command [selectWindow | name=EXECUTE_ACTION | ]]
    driver.findElement(By.id("c1::sn")).click();
    driver.findElement(By.cssSelector("span.x12l")).click();
    driver.findElement(By.cssSelector("#ctb2 > a.x12k > span.x12l")).click();
    // ERROR: Caught exception [ERROR: Unsupported command [selectWindow | name=BRSPAY | ]]
    driver.findElement(By.id("pt3:pc1:tTable:0:cilA::icon")).click();
    driver.findElement(By.xpath("//tr[@id='pt3:miContractOper']/td[2]")).click();
    // ERROR: Caught exception [ERROR: Unsupported command [selectWindow | name=EXECUTE_ACTION | ]]
    driver.findElement(By.id("c1::sn")).click();
    driver.findElement(By.cssSelector("#ctb2 > a.x12k > span.x12l")).click();

(Александр Трофимович) #12

При выполнении 1 и 2 кода:

<iframe id="IcmFrameResult_20cddd0d-1d70-44be-9806-e3f5f098d606-2427" frameborder="0" name="EXECUTE_ACTION" title="описание" style="width: 100%; height: 100%;" src="/ApiLibrary/login?vid=faces/adf.task-flow%3Fadf.tfId=executeAction%26adf.tfDoc=/WEB-INF/action/executeAction.xml&cid=20cddd0d-1d70-44be-9806-e3f5f098d606-2427&sid=dbac7548-8403-41b5-943c-b6ad5ddd8358">

При выполнении только 2 кода:

<iframe id="IcmFrameResult_7673c93d-566e-477c-a940-7bffec2c0555-2427" frameborder="0" name="EXECUTE_ACTION" title="описание" style="width: 100%; height: 100%;" src="/ApiLibrary/login?vid=faces/adf.task-flow%3Fadf.tfId=executeAction%26adf.tfDoc=/WEB-INF/action/executeAction.xml&cid=7673c93d-566e-477c-a940-7bffec2c0555-2427&sid=740f7dc6-60d5-407f-8303-f375ee043beb">

Почему достучаться до него не может?


(Александр Трофимович) #13

Может у кого-нить еще будут предложения? Как побороться с этой проблемой?