Необходимо нажать на вкладку контакты в системе Salesforce, получив сообщение об ошибке «Не удается прочитать свойства неопределенного (чтение «DefaultView»)»

#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 соответствующий узел.