#eclipse #selenium-webdriver #testng #salesforce-lightning
Вопрос:
Через автоматический скрипт хочет нажать на Contacts tab in Salesforce
. Но не смог этого сделать.
Получение ошибки:
org.openqa.selenium.JavascriptException: javascript error: Cannot read properties of undefined (reading 'defaultView') (Session info: chrome=94.0.4606.81) Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:25:48' System info: host: '****-****', ip: '***.***.*.*', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '15.0.1' Driver info: org.openqa.selenium.chrome.ChromeDriver Capabilities {acceptInsecureCerts: false, browserName: chrome, browserVersion: 94.0.4606.81, chrome: {chromedriverVersion: 93.0.4577.63 (ff5c0da2ec0ad..., userDataDir: C:UsersSristiAppDataLoc...}, goog:chromeOptions: {debuggerAddress: localhost:59263}, javascriptEnabled: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: WINDOWS, platformName: WINDOWS, proxy: Proxy(), setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify, webauthn:extension:credBlob: true, webauthn:extension:largeBlob: true, webauthn:virtualAuthenticators: true} Session ID: 0a464ae7e61949632bc4c84b5e790525 at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:64) at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500) at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481) at org.openqa.selenium.remote.http.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:187) at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:122) at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:49) at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:158) at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83) at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552) at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:285) at org.openqa.selenium.remote.RemoteWebElement.click(RemoteWebElement.java:84) at Automation.CreateTPARequest.loginTPAPortal(CreateTPARequest.java:60) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:564) at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:133) at org.testng.internal.TestInvoker.invokeMethod(TestInvoker.java:598) at org.testng.internal.TestInvoker.invokeTestMethod(TestInvoker.java:173) at org.testng.internal.MethodRunner.runInSequence(MethodRunner.java:46) at org.testng.internal.TestInvoker$MethodInvocationAgent.invoke(TestInvoker.java:824) at org.testng.internal.TestInvoker.invokeTestMethods(TestInvoker.java:146) at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:146) at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:128) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at org.testng.TestRunner.privateRun(TestRunner.java:794) at org.testng.TestRunner.run(TestRunner.java:596) at org.testng.SuiteRunner.runTest(SuiteRunner.java:377) at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:371) at org.testng.SuiteRunner.privateRun(SuiteRunner.java:332) at org.testng.SuiteRunner.run(SuiteRunner.java:276) at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:53) at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:96) at org.testng.TestNG.runSuitesSequentially(TestNG.java:1212) at org.testng.TestNG.runSuitesLocally(TestNG.java:1134) at org.testng.TestNG.runSuites(TestNG.java:1063) at org.testng.TestNG.run(TestNG.java:1031) at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:115) at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251) at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)
Я попробовал ниже 3 сценария, но ни один из них не сработал. Этот код работал до вчерашнего полудня после вечернего получения вышеупомянутой ошибки :
1.
//driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); WebElement contacts=driver.findElement(By.xpath("//div[@class='slds-context-bar']/one-app-nav-bar[@class='slds-grid slds-has-flexi-truncate']/nav[@class='slds-context-bar__secondary navCenter']/div/one-app-nav-bar-item-root[1]/a[@title='Contacts']/span[@class='slds-truncate' and text()='Contacts']")); //driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); contacts.click();
//new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//nav[@class='slds-context-bar__secondary navCenter']/div/one-app-nav-bar-item-root[2]/a[@title='Contacts']"))).click();
//driver.findElement(By.xpath("//nav[@class='slds-context-bar__secondary navCenter']/div/one-app-nav-bar-item-root[2]/a[@title='Contacts']")).click();
Комментарии:
1. Не могли бы вы поделиться соответствующим HTML-кодом в текстовом формате, пожалуйста ? Шаги для копирования
Press F12 in Chrome -gt; go to element section -gt; then right click on the element you want to share the outer HTML - gt; select copy and then outer HTML
2. lt;a href=»/lightning/o/Contact/home» title=»Contacts» tabindex=»0″ draggable=»false» aria-current=»false» class=»slds-context-bar__label-action dndItem»gt;lt;span class=»slds-truncate»gt;Контактыlt;/spangt;lt;/agt;
3. Пожалуйста, смотрите ниже.
Ответ №1:
Есть 4 способа щелкнуть в Selenium.
Я буду использовать этот xpath
//span[text()='Contacts']/parent::a[contains(@href,'lightning/o/Contact/home')]
Пробная версия кода 1 :
Thread.sleep(5); driver.findElement(By.xpath("//span[text()='Contacts']/parent::a[contains(@href,'lightning/o/Contact/home')]")).click();
Пробная версия кода 2 :
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//span[text()='Contacts']/parent::a[contains(@href,'lightning/o/Contact/home')]"))).click();
Пробная версия кода 3 :
Thread.sleep(5); WebElement button = driver.findElement(By.xpath("//span[text()='Contacts']/parent::a[contains(@href,'lightning/o/Contact/home')]")); ((JavascriptExecutor)driver).executeScript("arguments[0].click();", button);
Испытание кода 4 :
Thread.sleep(5); WebElement button = driver.findElement(By.xpath("//span[text()='Contacts']/parent::a[contains(@href,'lightning/o/Contact/home')]")); new Actions(driver).moveToElement(button).click().build().perform();
PS : Пожалуйста, проверьте в dev tools
(Google chrome), есть ли у нас уникальная запись HTML DOM
или нет.
Шаги для проверки:
Press F12 in Chrome
-gt; перейдите в gt; element
раздел -gt; сделайте gt; CTRL F
-gt; затем вставьте gt; xpath
и посмотрите, element
выделяется ли ваш желаемый 1/1
соответствующий узел.