Как на странице сайта определить ссылку по фрагменту текста и без учёта регистра текста?

1 лайк

Если вы согласны с Saurabh Gaur в этом топике - то вы оба по прежнему неправы, и не понимаете механики до конца.

2 лайка

Ну так напишите разницу между всеми теми способами что вы указали в Edit fiddle - JSFiddle - Code Playground Это будет гораздо полезнее для всех, чем убеждать меня в том что я не прав )

P.S.: Я не отрицаю того что я не до конца знаю принцип работы метода text()

1 лайк

У меня небольшой вопрос по коду:

"driver" подчёркивается красным и сообщает об ошибке: The name ‘driver’ does not exist in the current context

Как это можно исправить?

Значит у вас не определен driver.
Где вы его инстанцируете?

1 лайк

Ошибка выглядит вот так.
см. скирн Screenshot by Lightshot

Я только осваиваю C#, поэтому не совсем понимаю, что это значит.

У вас сперва должен быть инстанцирован вебдрайвер, примерно так:

IWebDriver driver = new FirefoxDriver();

Не делал это на C#, но суть везде одинаковая.

1 лайк

у вас этот объект называется Browser

1 лайк

Сделал следующим образом
см. скрин Screenshot by Lightshot

Выдаёт ошибку: “Cannot implicitly convert type ‘System.Collections.ObjectModel.ReadOnlyCollection<OpenQA.Selenium.IWebElement>’ to ‘System.Collections.Generic.List<OpenQA.Selenium.IWebElement>’”

IWebDriver Browser;

Это вы объявили переменную. А что вы сней дальше делали?
Должно быть Browser = new FirefoxDriver(); например.

И лучше пишите имена переменных с маленькой буквы.

1 лайк

Browser используется следующим образом

private void button1_Click(object sender, EventArgs e)
        {
             OpenQA.Selenium.Chrome.ChromeOptions co = new OpenQA.Selenium.Chrome.ChromeOptions();            
             co.BinaryLocation = @"c:\soft\1_1\GoogleChromePortable_1.exe";
             co.AddArguments(@"user-data-dir=c:\soft\Data\profile\");
             Browser = new OpenQA.Selenium.Chrome.ChromeDriver(co);
             Browser.Navigate().GoToUrl(comboBox1.Text); // переходим на сайт 
            IWebElement SearchInput = Browser.FindElement(  By.Id(comboBox2.Text)   ); // элемент для поиска на странице           

            SearchInput.SendKeys(textBox2.Text + OpenQA.Selenium.Keys.Enter); // текст для ввода в поисковик + нажатие Enter

            
        }

Я предполагаю пока использовать Chrome.
Как данная строка будет выглядеть для Chrome?

PS
Прошу пощения, если вопросы совсем элементарные.
Почитал справочники, но в упор не могу понять в чём проблема.

Проблема глобальная.

Если коротко, то вы инстанцируете драйвер внутри метода, который кликает на кнопку.
Соответственно область его видимости - только этот метод.
В связи с этим я настоятельно рекомендую почитать про #PageObject
Чтобы было понимание архитектуры фреймворка. Нельзя фундамент ставить в дверной проем, а вы это делаете :slight_smile:

И пока мы не углубились в дебри - почему C# выбрали для обучения? По-моему это самый сложный вариант для новичка из возможных.

А вообще на официальной странице Селениума все базовые примеры есть: The Selenium Browser Automation Project | Selenium

1 лайк

ошибка с приведением типов решается просто объявлением типа явно
в строке 378

ReadOnlyCollection<IWebElement>Element = Browser.FindElements(By....) 
1 лайк

…по-моему это самый сложный вариант для новичка из возможных.
хм…?? погуглите например темы

  • C# is more advanced than Java
  • C# is easier than Java

и удивитесь

И так ошибка

The type or namespace name ‘ReadOnlyCollection<>’ could not be found (are you missing a using directive or an
assembly reference?)
Operator ‘<’ cannot be applied to operands of type ‘int’ and ‘method group’

Вроде решил.
Прописал
using System.Collections.ObjectModel;

Не удивлюсь. Я про C# в связке с вебдрайвером. Гораздо меньше учебных материалов и толковых примеров в сети, чем по той же Джаве или Питону. Человек еще переменные не научился объявлять толком, а ему уже приведением типов заниматься нужно :slight_smile: Только не принимайте близко к сердцу.

2 лайка

И всё таки: как сделать, чтобы собирал в список элементы не взирая на регистр искомого текста?
Скрин поисковой выдачи

1. Для данного кода: XPath(“//h3//a[contains(lower-case(.), ‘программа на c#’)]”)

ReadOnlyCollection<IWebElement> Element = Browser.FindElements(By.XPath("//h3//a[contains(lower-case(.), 'программа на c#')]"));

выдаёт ошибку
Unable to locate an element with the xpath expression //h3//a[contains(lower-case(.), ‘программа на c#’)] because of the following error:

Failed to execute ‘evaluate’ on ‘Document’: The string ‘//h3//a[contains(lower-case(.), ‘программа на c#’)]’ is not a valid XPath expression.

2. Для данного кода: XPath(“//h3//a[contains(text(), ‘программа на c#’)]”)
скрин Screenshot by Lightshot
вообще никаких реакций

PS

))
Всё ок. Спасибо за информацию… А то начитался… голова кругом… не знаешь с чего начать. Ну раз начал с С#, попробую довести до логического конца

приведите url сайта или сделайте фрагмент в fiddler - честно говоря я по прежнему сомневаюсь что когда вы используете xpath - получится и что надежнее в C# выбирать но долго объяснять почему…

1 лайк

А покажите полностьтю весь код.

1 лайк