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

у меня тот же exception получилось что у it_ot
a работающий пример выглядит вот так (assert ы пожалуйста поднастройте для вашего случае самостоятельно):

// Assert
IWebElement element = null;
String matcher = "(?i:" + "программа на c#" + "|" + "Link Successfully clicked" + ")";
try {
    wait.Until(d => {
        ReadOnlyCollection<IWebElement> a = d.FindElements(By.XPath("//div[@class='intro-message']/h3"));
        element = a.First(o => Regex.IsMatch(o.Text, matcher, RegexOptions.IgnoreCase));
        return (element != null);
    });
} catch (Exception e) {
    verificationErrors.Append(e.Message);
}
Assert.IsTrue(element.Text.IndexOf("Link Successfully clicked") > -1, element.Text);

сайт кстати хороший для обучения WebDriver - http://suvian.in/selenium/

1 лайк
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using OpenQA.Selenium;
using System.Collections.ObjectModel;
using OpenQA.Selenium.Support.UI;
using System.Text.RegularExpressions;

namespace Demo
{
    public partial class Form1 : Form
    {            
        IWebDriver Browser;        
                
        public Form1()
        {
            InitializeComponent();         
        }

		// переход по ссылкам
        private void button1_Click(object sender, EventArgs e)
        {
            
            Browser.Navigate().GoToUrl(comboBox1.Text); // переходим на сайт            
            IWebElement SearchInput = Browser.FindElement(  By.Id(comboBox2.Text)   ); // элемент для поиска на странице           
            SearchInput.SendKeys(textBox2.Text + OpenQA.Selenium.Keys.Enter); // текст для ввода в поисковик + нажатие Enter            
        }

        // закрыть браузер
		private void button2_Click(object sender, EventArgs e)
        {
            Browser.Quit(); // закрытие браузера
        }     
        
        // открытие браузера
        private void button4_Click(object sender, EventArgs e)
        {
            OpenQA.Selenium.Chrome.ChromeOptions co = new OpenQA.Selenium.Chrome.ChromeOptions();            
            co.BinaryLocation = @"c:\soft\GoogleChromePortable_1.exe";
            co.AddArguments(@"user-data-dir=c:\soft\Data\profile\");

            Browser = new OpenQA.Selenium.Chrome.ChromeDriver(co);         
        }            

       // поиск элемента
        private void button10_Click(object sender, EventArgs e) 
        {          
            ReadOnlyCollection<IWebElement> Element = Browser.FindElements(By.XPath("//h3//a[contains(text(), 'программа на c#')]"));                                                                                                                                                                                                                                                               
            for (int i = 0; i < Element.Count; i++)
            {
               String s = Element[i].Text;
               if (s.ToLower().Contains("программа на C#".ToLower()))                
               {
                   textBox1.AppendText("Позиция № " + (i + 1).ToString() + " " + s + "\r\n");
                   Element[i].SendKeys(OpenQA.Selenium.Keys.Control + OpenQA.Selenium.Keys.Shift + OpenQA.Selenium.Keys.Return);
               }
            }
        } // button10_Click - КОНЕЦ       
    }
}


Прошу прощения, но ни как не могу “побороть” ошибки
**1.**The name ‘Assert’ does not exist in the current context
2. A local or parameter named ‘e’ cannot be declared in this scope because that name is used in an enclosing local scope to define a local or parameter

Скрин ошибки Screenshot by Lightshot

вот весь

using System;
using System.Text;
using System.Text.RegularExpressions;
using System.Collections.Generic;
using System.Globalization;
using System.Collections.ObjectModel;
using System.IO;
using System.Threading;
using System.Linq;
using System.Drawing;
using System.Windows.Forms;

using NUnit.Framework;

using OpenQA.Selenium;
using OpenQA.Selenium.Interactions;
using OpenQA.Selenium.Support.UI;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.IE;
using OpenQA.Selenium.PhantomJS;

namespace SeleniumTests
{
    [TestFixture]
    public class Test
    {
        private IWebDriver driver;
        private StringBuilder verificationErrors;
        private const int window_width = 800;
        private const int window_height = 600;
        private const int script_wait_seconds = 60;
        private const int wait_seconds = 3;
        private int highlight_timeout = 1000;
        private Actions actions;
        private WebDriverWait wait;
        private String baseUrl = "http://suvian.in/selenium";

        [SetUp]
        public void SetupTest() {
            verificationErrors = new StringBuilder();
            driver = new FirefoxDriver();
            driver.Manage().Cookies.DeleteAllCookies();
            driver.Manage().Window.Size = new System.Drawing.Size(window_width, window_height);
            driver.Manage().Timeouts().SetScriptTimeout(TimeSpan.FromSeconds(script_wait_seconds));
            driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(20));
            driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(50));
            driver.Navigate().GoToUrl(baseUrl);
            wait = new WebDriverWait(driver, TimeSpan.FromSeconds(wait_seconds));
            actions = new Actions(driver);
        }

        [TearDown]
        public void TeardownTest() {
            try {
                driver.Quit();
            } catch (Exception) {
                // Ignore errors if unable to close the browser
            }
            Assert.AreEqual("", verificationErrors.ToString());
        }

        [TestFixtureSetUp]
        public void TestFixtureSetUpMethod() {

        }

        [TestFixtureTearDown]
        public void TestFixtureTearDownMethod() {
        }

        // explore Selenium WebDriver testing  practice site from https://groups.google.com/forum/#!topic/selenium-users/JXggllPayGE
        [Test]
        public void Test1()
        {
            // Arrange
            driver.Navigate().GoToUrl("http://suvian.in/selenium/1.1link.html");
            // Act
            try {
                wait.Until(ExpectedConditions.ElementIsVisible(By.CssSelector("div.container div.row div.col-lg-12 div.intro-message a")));
            } catch (Exception e) {
                verificationErrors.Append(e.Message);
            }

            IWebElement element = driver.FindElement(By.CssSelector("div.container div.row div.col-lg-12 div.intro-message a"));
            // Assert
            Assert.IsTrue(element.Text.IndexOf("Click Here") > -1, element.Text);
            // Act
            element.Click();
            // Wait page to load
            string linkText = "Link Successfully clicked";
            try {
                wait.Until(d => {
                    IWebElement e = d.FindElement(By.ClassName("intro-message"));
                    return (e.Text.IndexOf(linkText) > -1);
                });
            } catch (Exception e) {
                verificationErrors.Append(e.Message);
            }

            // Assert
            element = driver.FindElement(By.ClassName("intro-message"));
            Assert.IsTrue(element.Text.IndexOf(linkText) > -1, element.Text);
            // Asserts of case-insensitive link search - many will fail
            element = null;
            String matcher = "(?i:" + "программа на c#" + "|" + linkText + ")";
            try {
                wait.Until(d => {
                    element = d.FindElements(By.XPath("//div[@class='intro-message']/h3")).First(o =>
                        Regex.IsMatch(o.Text, matcher, RegexOptions.IgnoreCase)
                    );
                    return (element != null);
                });
            } catch (Exception e) {
                verificationErrors.Append(e.Message);
            }
            Assert.IsTrue(element.Text.IndexOf(linkText) > -1, element.Text);

            // the following attempts would all fail
            try {
                wait.Until(d => {
                    IWebElement e = d.FindElement(By.XPath(
                        String.Format("//div[@class='intro-message']/h3[contains(translate(text(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZАБВГДЕЁЖЗИКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ', 'abcdefghijklmnopqrstuvwxyzабвгдеёжзиклмнопрстуфхцчшщьыъэюя'), '{0}')]", linkText)));
                    return (e.Text.IndexOf(linkText) > -1);
                });
            } catch (Exception e) {
                verificationErrors.Append(e.Message);
            }

            try {
                wait.Until(d => {
                    ReadOnlyCollection<IWebElement> e = d.FindElements(By.XPath(String.Format("//div[@class='intro-message']/h3[contains(translate(text(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZАБВГДЕЁЖЗИКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ', 'abcdefghijklmnopqrstuvwxyzабвгдеёжзиклмнопрстуфхцчшщьыъэюя'), '{0}')]", linkText)));
                    return (e.Count > 0);
                });
            } catch (Exception e) {
                verificationErrors.Append(e.Message);
            }
            element = driver.FindElement(By.XPath("//div[@class='intro-message']/h3"));
            Assert.IsTrue(element.Text.IndexOf(linkText) > -1, element.Text);
            ReadOnlyCollection<IWebElement> elements;
            elements = driver.FindElements(By.XPath(String.Format("//div[@class='intro-message']/h3[contains(text(), 'Link Successfully clicked')]", linkText)));
            Assert.IsTrue((elements.Count > 0));
            elements = driver.FindElements(By.XPath("//div[@class='intro-message']/h3[contains(translate(text(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZАБВГДЕЁЖЗИКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ', 'abcdefghijklmnopqrstuvwxyzабвгдеёжзиклмнопрстуфхцчшщьыъэюя'), 'Link Successfully clicked')]"));
            try {
                // would fail            
                Assert.IsTrue((elements.Count > 0));
            } catch (Exception e) {
                verificationErrors.Append(e.Message);
            }
        }
    }
}

packages.config

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="NUnit" version="2.6.4" targetFramework="net40" />
  <package id="PhantomJS" version="2.1.1" targetFramework="net40" />
  <package id="FluentAssertions" version="4.4.0" targetFramework="net40" />
  <package id="WebDriver.ChromeDriver.win32" version="2.21.0.0" targetFramework="net40" />
  <package id="WebDriver.IEDriverServer.win32" version="2.53" targetFramework="net40" />
  <package id="Selenium.WebDriver" version="2.53.0" targetFramework="net40" />
  <package id="Selenium.Support" version="2.53.0" targetFramework="net40" />
  <package id="Moq" version="4.0.10827" targetFramework="net40" />
  <package id="Nmock3" version="3.5.44" targetFramework="net40" />
  <package id="Newtonsoft.Json" version="8.0.3" targetFramework="net40" />
</packages>
1 лайк